<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>ES6</title>
</head>
<body>
<script>
    /*
      变量提升：
      变量提升，在当前上下文中（全局/私有/块级），js代码自上而下执行之前，浏览器会提前处理一些事情
      变量提升会把上下文中的所有带 var/function 关键字进行提前声明或者定义

    var  作用域为该语句所在的函数内，且存在变量提升现象
    let 作用域为该语句所在的代码块内，不存在变量提升
    const 常量声明，不能修改
     */
/*
                    解构
     解构赋值：按照一定模式，从数组中或对象中提取值，将提取的值赋给另外的变量
 */
     // 数组解构
    //如果结构不成功，变量的值为undefined
    let arr=[1,2,3];
    let [a,b,c]=arr;
    //对象结构
    let person={name:"111",age:"1"};
    let {name,age}=person;
    let{name:myname,age:myage}=person;
    /*
                箭头函数
      ()=>{}
      const fn=()=>{}
      如果函数体只有一句代码，且代码的执行结果就是返回值，可以省略大括号
      eg：function sum(num1,num2){return num1+num2;}
          const sum=(num1,num2)=>num1+num2;
      如果形参只有一个，可以省略小括号
      eg: function fn(v){ return v;}
          const fn=v=> v;
     箭头函数中的this指向的是定义箭头函数定义位置中的this  this->定义位置this
     */
    /*
               剩余参数
       剩余参数语法允许我们将一个不定数量的参数表示为一个数组
       eg: function sum=(first,...args){          // ...表示接受剩余的所有实参
         console.log(first); //   first==10
         console.log(args);  // args==[20,30]
        }
       sum(10,20,30);
     */
    //扩展运算符   将数组扩展成一系列的元素
    let ary=[1,2,3];
    console.log(...ary);  //1 2 3 不输出逗号
    //合并数组
    let ary2=[4,5,6]
    let ary3=[...ary,...ary2]; // ary.push(...ary2);
    /*
    将伪数组转换为真正的数组
    eg: var aaa=document.getElementByTagName("div");
        var ary=[...aaa];
     Array.from()
       将类数组或可遍历对象转换成真正的数组
     eg:
       let arrayLike={
       '0':'a',
       '1':'b',
       '2':'c',
       length:3
       };
       let arr2=Array.from(arrayLike，item=>item*2);  //  ['a','b','c']

       还可以接受第二个参数，用于对每个元素进行处理，将处理后的值放入返回的数组

     Array.find()
         用于找出第一个符合条件的数组成员，如果没找到，返回undefined
     Array.findIndex()
         用于找出第一个符合条件的数组成员的位置（索引），如果没有返回 -1
     Array.includes()
         表示某个数组是否包含给定的值，返回布尔值
     模板字符串
         eg:  let name=`这是一个模板字符串`;
         特点：
          1. 可以用 ${} 解析变量
           eg: let name='张三';
               let sayHello=`hello,my name is ${name}`;
           2.可以换行
           3.模板字符串中可以调用函数,显示的是函数的返回值
      startWith（）
          判断字符串是否以某字符开头      true\false
      endWith()
          判断字符是否以某字符结尾        true\false
      repeat()
          表示将字符串重复N次，返回一个新字符串
          eg:  "x".repeat(3);   //  "xxx"
      Set数据结构
         类似于数组，但成员的值都是唯一的，没有重复的值
         set本身是一个构造函数,用来生成Set数据结构
         eg: const s=new Set();
       实例方法:
         add（value） 添加某个值，返回Set结构本身
         delete（value） 删除某个值，返回一个布尔值，表示删除是否成功
         has（value） 返回一个布尔值，表示set中是否有该值
         clear（）抢出所有成员，没有返回值
       set遍历，用forEach
     */

</script>
</body>
</html>